iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
0

(本篇文章網誌版:http://shineright.blogspot.tw/2016/12/day-16.html

把昨天做的敵人拉到Project欄成為Prefab後,就可以來做敵人的重生與移除了。

先前說過,我要做的敵人重生系統和裝備重生不太一樣。裝備重生是在一定範圍(X軸)內重生,並固定在5~10後重生下一個裝備。而現在要做的敵人重生系統是由11個重生點構成,每個重生點每秒有一定機率生出敵人,且敵人出生的位置固定。

先在Scene裡建立的重生點。

http://ithelp.ithome.com.tw/upload/images/20161216/20103149ELJWy2wUVe.png

http://ithelp.ithome.com.tw/upload/images/20161216/20103149WYWJcyID7h.png

新建一個名為EnemySpawnPoint.cs的C# Script。

public class EnemySpawnPoint : MonoBehaviour 
{
    public float spawnRatePerSec;  //每秒重生機率
    public GameObject[] enemyPrefabs;  //重生的敵人種類
    
    void Start()
    {
		//每秒呼叫一次SpawnEnemy
        InvokeRepeating ("SpawnEnemy", 1f, 1f);
    }
    
    void SpawnEnemy()
    {
		//一定機率重生隨機一個敵人
        if (Random.value < spawnRatePerSec) {
            Instantiate (enemyPrefabs [Random.Range (0, enemyPrefabs.Length)], transform.position, Quaternion.identity);
        }
    }
}

Start()函數內的InvokeRepeating()InvokeRepeating()Invoke()很像,只是InvokeRepeating可以讓程式重複呼叫一個函數。第一個參數是要呼叫的函數名,第二個參數首次呼叫該函數的延遲時間,第三個參數則是每次呼叫之間的間隔時間。這裡我讓程式每秒呼叫一次SpawnEnemy()

SpawnEnemy函數的if判斷式決定是否重生新的敵人。Random.value會隨機回傳[0, 1]之間的數,所以如果spawnRatePerSec是0.1,該if判斷式就有0.1的機率成立。

回到Unity Editor的Scene視窗,把Enemy Spawn Point (Script) Component加上所有重生點Game Object。並把敵人的Prefab拉至Enemy Prefabs欄位中(Left 1,2,3重生點指定為 Right Side敵人,Right 1,2,3應定為Left Side敵人,而Top 1,2,3,4,5指定為縱向敵人)。

最後,把每個重生點的Spawn Rate Per Sec設定好就完成了!(我把它設為0.05,不然會一次重生超多敵人)

進入Play Mode測試一次,似乎一切完美……但跑久了便會發現,生成的敵人就算離開了螢幕,還是會待在Scene上,永遠不會消失。

根據先前所寫的程式,有子彈的Destroy After Seconds (Script) Component或掉落裝備碰觸到邊界的Destroy Game Object On Trigger (Script) Component兩種方式。在這裡,我覺得後者比較合適,因為敵人只會直線前進,並且移動速度皆不相同。若使用Destroy After Seconds,每個敵人都要慢慢測試它們離開螢幕的時間以設定數值。

先為所有敵人、敵人子彈的Prefab都加上Rigidbody 2D和Box Collider 2D的Component,並把Rigidbody 2D的Is Kinematic欄打勾,使物理作用力對它們無效。此外,Box Collider 2D的Is Trigger也要打勾。

更新完Prefab後,到Hierarchy中點我在Day 7建立的「Boundary Collider」Game Object,為已經有一個Box Collider的它再建立兩個新的Box Collider Component,一樣把Is Trigger欄打勾,並用Edit Collider按鈕分別把兩個Collider的範圍拉到螢幕左方與螢幕右方,阻擋所有敵人可達範圍。

http://ithelp.ithome.com.tw/upload/images/20161216/20103149eGRdGTH81j.png

我把Collider拉離螢幕遠一點,以免敵人一重生就碰到Boundary Collider而慘遭移除。

進入Play Mode測試,敵人的重生與移除都完成了!

繪圖進度

設計完App的Icon。

http://ithelp.ithome.com.tw/upload/images/20161216/20103149ADNCkVdxdC.png

並把排行榜和按鈕遊戲開始的觸控指示畫完。

http://ithelp.ithome.com.tw/upload/images/20161216/20103149xo56u7GQjb.png

待續。


上一篇
Day 15: 敵人現身
下一篇
Day 17: 子彈、敵人碰撞
系列文
我要和天一樣高!!!(Unity 2D手機小遊戲開發日誌)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言